<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
        存储多个数据的容器
          对象（无序）
            key必须是字符串类型和Symbol类型
            value任意类型
          数组（有序）
            key是下标 0 1 2 3 4
            value任意类型
          Set 相当于数组，特点值不能重复
            [...new Set(arr)]
          Map 相当于对象
            key可以是任意类型
            value任意类型

          WeakSet 相当于Set
            值必须是对象类型，且不能重复
            值都是弱引用，当里面的值没有其他变、属性引用的时候，会自动删除（自动回收，自动释放）

          WeakMap
            key必须对象类型 --> 弱引用
            value任意类型
      */
      // const s1 = new Set([10, 2, 1, 5, 2, 1, 6, 7]);
      // s1.forEach((...args) => {
      //   console.log(args);
      // });

      // const m1 = new Map();
      // m1.set({ name: "jack" }, [2, 1, 3]);
      // console.log(m1);

      const ws1 = new WeakSet();

      let obj = { name: "aaa" };
      ws1.add(obj);
      // ws1.add(obj);
      // ws1.add({ name: "aaa" });
      console.log(ws1);
      obj = null;
      console.log(ws1);
    </script>
  </body>
</html>
